#ifndef INMERSION_H
#define INMERSION_H

#include "stable.h"

class Buceador;
class Sitio;
class Buddy;
class Viaje;
class Muestra;

class Inmersion
{
public:
    Inmersion();
    Inmersion( Buceador* buceador,
               quint32 numero,
               const QDateTime& inicio,
               quint32 duracion,
               qreal profundidadmaxima,
               qreal profundidadmedia,
               Sitio* sitio,
               const qnuint& tiemposuperficie,
               const qnuint& temperaturaaire,
               const qnuint& temperaturasuperficie,
               const qnuint& temperaturafondo,
               const qnuint& volumenbotella,
               const qnuint& presioninicial,
               const qnuint& presionfinal,
               qreal lastre,
               quint32 porcentajeo2,
               Buddy* buddy,
               Viaje* viaje );
    ~Inmersion() { qDeleteAll( _muestras.begin(), _muestras.end() ); }
    void addMuestra( quint32 tiempo, Muestra* muestra ) { _muestras.insert( tiempo, muestra ); }
    void setNumero( quint32 numero ) { _numero = numero; }
    void setMaxTiempo( quint32 maxtiempo ) { _maxtiempo = maxtiempo; }
    quint32 numero() const { return _numero; }
    Buceador* buceador() const { return _buceador; }
    QDateTime inicio() const { return _inicio; }
    quint32 duracion() const { return _duracion; }
    qreal profundidadMaxima() const { return _profundidadmaxima; }
    qreal profundidadMedia() const { return _profundidadmedia; }
    Sitio* sitio() const { return _sitio; }
    qnuint intervaloSuperficie() { return _intervalosuperficie; }
    qnuint temperaturaAire() { return _temperaturaaire; }
    qnuint temperaturaSuperficie() { return _temperaturasuperficie; }
    qnuint temperaturaFondo() { return _temperaturafondo; }
    qnuint volumenBotella() { return _volumenbotella; }
    qnuint presionInicial() { return _presioninicial; }
    qnuint presionFinal() { return _presionfinal; }
    qnuint presionConsumida();
    qnuint aireConsumida();
    qreal lastre() { return _lastre; }
    quint32 porcentajeO2() const { return _porcentajeo2; }
    Buddy* buddy() const { return _buddy; }
    Viaje* viaje() const { return _viaje; }
    QList<Muestra*> muestras() const { return _muestras; }
    quint32 maxTiempo() const { return _maxtiempo; }
    qreal mod() const; // Maximum Operating Depth = límite profundidad (por toxicidad oxígeno)
    qnreal consumoAireSuperficie();
private:
    Buceador* _buceador;
    quint32 _numero;
    QDateTime _inicio;
    quint32 _duracion;
    qreal _profundidadmaxima;
    qreal _profundidadmedia;
    Sitio* _sitio;
    qnuint _intervalosuperficie;
    qnuint _temperaturaaire;
    qnuint _temperaturasuperficie;
    qnuint _temperaturafondo;
    qnuint _volumenbotella;
    qnuint _presioninicial;
    qnuint _presionfinal;
    qreal _lastre;
    quint32 _porcentajeo2;
    Buddy* _buddy;
    Viaje* _viaje;
    QList<Muestra*> _muestras;
    quint32 _maxtiempo;
};

Q_DECLARE_METATYPE( Inmersion* );

#endif // INMERSION_H
